package pl.wr.physics.units.SI.derived.multidim;

import pl.wr.math.number.Fraction;
import pl.wr.physics.units.AbstractUnit;
import pl.wr.physics.units.SI.Prefix;
import pl.wr.physics.units.SI.base.m;

/**
 * Volume - International System of Units (SI)
 * 
 * @version 1.0
 * @author wieslaw.rodak
 * 
 */
public final class m3 extends AbstractUnit {

    // TODO?
    public static final String symbol = "V";

    /**
     * volume - m<sup>3</sup>
     * 
     * @param value
     *            in <code>int</code>
     */
    public m3(int value) {
        this(Prefix.basic, value);
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param value
     *            in <code>float</code>
     */
    public m3(float value) {
        this(Prefix.basic, value);
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param value
     *            in <code>Fraction</code>
     */
    public m3(Fraction value) {
        this(Prefix.basic, value);
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param p
     *            - prefix SI
     * @param value
     *            - value in <code>int</code>
     */
    public m3(Prefix p, int value) {
        super(p, value, m3.class.getSimpleName());
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param p
     *            - prefix SI
     * @param value
     *            - value in <code>float</code>
     */
    public m3(Prefix p, float value) {
        super(p, value, m3.class.getSimpleName());
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param p
     *            - prefix SI
     * @param value
     *            - value in <code>Fraction</code>
     */
    public m3(Prefix p, Fraction value) {
        super(p, value, m3.class.getSimpleName());
    }

    /**
     * volume - m<sup>3</sup>
     * 
     * @param p
     *            - prefix SI
     * @param size1
     *            - value in <code>Fraction</code>
     * @param size2
     *            - value in <code>Fraction</code>
     * @param size3
     *            - value in <code>Fraction</code>
     */
    public m3(Prefix p, m size1, m size2, m size3) {
        super(p, Fraction.multiply(Fraction.multiply(size1.getValue(), size2.getValue()), size3.getValue()), m3.class
                .getSimpleName());
    }

}
